package org.hwua.production.service.impl;

import java.util.List;

import org.hwua.production.domain.authority.SysRolePermission;
import org.hwua.production.domain.authority.SysRolePermissionExample;
import org.hwua.production.domain.custom.CustomResult;
import org.hwua.production.domain.custom.EUDataGridResult;
import org.hwua.production.mapper.authority.SysRolePermissionMapper;
import org.hwua.production.service.PermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
/**
 * 角色权限配置业务逻辑层实现类，用于配置角色所能操作的系统功能项
 * @author hwua
 *
 */
@Service
public class PermissionServiceImpl implements PermissionService{

	@Autowired
	SysRolePermissionMapper sysRolePermissionMapper;
	
	/**
	 * 带条件及翻页参数获取角色权限配置列表
	 * @param page 页码
	 * @param rows 每行记录数
	 * @sysRolePermission 封装了条件信息
	 */
	@Override
	public EUDataGridResult getList(int page, int rows, SysRolePermission sysRolePermission)
			throws Exception{
		//查询列表
		SysRolePermissionExample example = new SysRolePermissionExample();
		//分页处理
		PageHelper.startPage(page, rows);
		List<SysRolePermission> list = sysRolePermissionMapper.selectByExample(example);
		//创建一个返回值对象
		EUDataGridResult result = new EUDataGridResult();
		result.setRows(list);
		//取记录总条数
		PageInfo<SysRolePermission> pageInfo = new PageInfo<>(list);
		result.setTotal(pageInfo.getTotal());
		return result;
	}

	/**
	 * 通过编号获取角色权限配置信息
	 */
	@Override
	public SysRolePermission get(String id) throws Exception{
		return sysRolePermissionMapper.selectByPrimaryKey(id);
	}

	/**
	 * 通过角色编号获取角色权限配置信息
	 */
	@Override
	public SysRolePermission getByRoleId(String string) throws Exception{
		SysRolePermissionExample example = new SysRolePermissionExample();
		SysRolePermissionExample.Criteria criteria = example.createCriteria();
		criteria.andSysRoleIdEqualTo(string);
		return sysRolePermissionMapper.selectByExample(example).get(0);
	}
	
	/**
	 * 通过编号删除角色权限配置信息
	 * @param id 编号
	 */
	@Override
	public CustomResult delete(String id) throws Exception{
		int i = sysRolePermissionMapper.deleteByPrimaryKey(id);
		if(i>0){
			return CustomResult.ok();
		}else{
			return null;
		}
	}

	/**
	 * 保存添加角色权限配置信息
	 * @param sysRolePermission 封装了角色权限配置信息,其中id 编号,roleId 角色编号及sysPermissionId 系统功能编号必有
	 */
	@Override
	public CustomResult insert(SysRolePermission sysRolePermission) throws Exception{
		int i = sysRolePermissionMapper.insert(sysRolePermission);
		if(i>0){
			return CustomResult.ok();
		}else{
			return CustomResult.build(101, "新增权限失败");
		}
	}

	/**
	 * 保存修改角色权限配置信息
	 * @param sysRolePermission 封装了角色权限配置信息,其中id 编号必有,可能有roleId 角色编号,可能有sysPermissionId 系统功能编号等,
	 * 根据填的值更新表里对应列
	 */
	@Override
	public CustomResult update(SysRolePermission sysRolePermission) throws Exception{
		int i = sysRolePermissionMapper.updateByPrimaryKeySelective(sysRolePermission);
		if(i>0){
			return CustomResult.ok();
		}else{
			return CustomResult.build(101, "修改权限失败");
		}
	}

	/**
	 * 保存修改角色权限配置信息
	 * @param roleId 角色编号
	 * @param sysPermissionId 系统功能编号，只更新系统功能这一列
	 */
	@Override
	public CustomResult updateByRoleId(String roleId, String sysPermissionId) throws Exception{
		SysRolePermission sysRolePermission = new SysRolePermission();
		sysRolePermission.setSysPermissionId(sysPermissionId);
		sysRolePermission.setSysRoleId(roleId);
		//修改角色权限表
		int i = sysRolePermissionMapper.updateRolePermission(sysRolePermission);
		if(i>0){
			return CustomResult.ok();
		}else{
			return null;
		}
	}
	
	/**
	 * 保存修改角色权限配置信息,会修改表里除了主键外的其他列
	 * @param sysRolePermission 封装了角色权限配置信息,id 编号,roleId 角色编号,sysPermissionId 系统功能编号
	 */
	@Override
	public CustomResult updateAll(SysRolePermission sysRolePermission) throws Exception{
		int i = sysRolePermissionMapper.updateByPrimaryKey(sysRolePermission);
		if(i>0){
			return CustomResult.ok();
		}else{
			return CustomResult.build(101, "修改权限失败");
		}
	}

	/**
	 * 获取所有角色权限配置信息列表
	 */
	@Override
	public List<SysRolePermission> find() throws Exception{
		SysRolePermissionExample example = new SysRolePermissionExample();
		return sysRolePermissionMapper.selectByExample(example);
	}
}
